home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / make / icmake-6.000 / icmake-6 / icmake / comp / onearg.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-08  |  1.2 KB  |  65 lines

  1. /*
  2.                                 O N E A R G . C
  3. */
  4.  
  5. #include "iccomp.h"
  6.  
  7. ESTRUC_ *onearg(type, arg)
  8.     E_TYPE_
  9.         type;
  10.     ESTRUC_
  11.         *arg;
  12. {
  13.     register int
  14.         ok;
  15.  
  16.     etoc(arg);                               /* arg to stack */
  17.  
  18.     switch (type)
  19.     {
  20.         case f_ascii_int:
  21.             if ( (ok = test_type(arg, e_str | e_int)) )
  22.             {
  23.                 if (test_type(arg, e_int))  /* int received    */
  24.                     type = f_ascii_str;     /* string returned */
  25.             }
  26.  
  27.         break;
  28.  
  29.         case f_sizeoflist:
  30.             ok = test_type(arg, e_list);
  31.         break;
  32.  
  33.         case f_echo:
  34.             ok = test_type(arg, e_int);
  35.         break;
  36.  
  37.         default:
  38.         /*
  39.             case f_putenv:
  40.             case f_exists:
  41.             case f_cmd_head:
  42.             case f_cmd_tail:
  43.             case f_arg_head:
  44.             case f_arg_tail:
  45.             case f_g_path:
  46.             case f_g_base:
  47.             case f_g_ext:
  48.             case f_strlen:
  49.         */
  50.             ok = test_type(arg, e_str);
  51.     }
  52.  
  53.     if (ok)
  54.     {
  55.         if (type == f_strlen)
  56.             callhidden(he_strlen, arg);
  57.         else
  58.             callrss(arg, type);
  59.     }
  60.     else
  61.         semantic(type_conflict, funstring[type]);
  62.  
  63.     return (arg);
  64. }
  65.